home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / kid / disk / kid.img / bigscrol.s < prev    next >
Encoding:
Text File  |  1994-08-07  |  9.3 KB  |  368 lines

  1.         .include    new.mac
  2.         .include    ..\cex.mac
  3.         .include    ..\nsp.mac
  4.         .include    ..\cexlib.mac
  5.         .include    ..\cmn.mac
  6.         .include    ..\big.mac
  7. *************************************************************************
  8. *    XDEF AREA                        *
  9. *************************************************************************
  10.         .xdef        BigScroll
  11. .text
  12. *********************************************************
  13. *    背景のスクロールの計算を行う            *
  14. *********************************************************
  15. BigScroll:
  16.     PUSH        d0-d5/a0-a3
  17.     *****************************************
  18.     *                    *
  19.     *****************************************
  20.     movea.l        CMN_BIG_CHR1_ADR(a6)    ,a0
  21.     movea.l        CMN_BIG_CHR2_ADR(a6)    ,a1
  22.     movea.l        CexDataAdr,a2
  23.     *********************************************************
  24.     *    座標が位置を判定し、左側と右側を設定する    *
  25.     *********************************************************
  26.     move.w        CHR_VX(a0)        ,d0
  27.     move.w        CHR_VX(a1)        ,d1
  28.     cmp.w        d0            ,d1
  29.     bge.w        @f
  30.         *************************************************
  31.         *    2Pの方が小さいので交換        *
  32.         *************************************************
  33.         exg.l        a0        ,a1
  34. @@:    *********************************************************
  35.     *    左側と右側の距離を計る                *
  36.     *********************************************************
  37. *    movea.l        CHR_PMADR(a0)        ,a3        * a3..ムーブ判定情報
  38. *    move.w        MVE_TX(a3)        ,d4
  39.  
  40. *    movea.l        CHR_PMADR(a1)        ,a3        * a3..ムーブ判定情報
  41. *    moveq.l        #0            ,d5
  42. *    sub.w        MVE_TX(a3)        ,d5
  43.  
  44. *    move.w        CHR_VX(a0)        ,d1
  45. *    add.w        d4            ,d1
  46.  
  47. *    move.w        CHR_VX(a1)        ,d0
  48. *    add.w        d5            ,d0
  49. *    sub.w        d1            ,d0
  50.  
  51. ******************************************************************************
  52.     movea.l        CHR_PMADR(a0)        ,a3        * a3..ムーブ判定情報
  53.     cmp.w        #0            ,CHR_DIR(a0)
  54.     bne        CHR1_HIDARI
  55.         move.w        MVE_TX(a3)        ,d4
  56.         bra.w        CHR2
  57. CHR1_HIDARI:
  58.         moveq.l        #0            ,d4
  59.         sub.w        MVE_TX(a3)        ,d4
  60.         moveq.l        #0            ,d1
  61.         move.b        MVE_XD(a3)        ,d1
  62.         sub.w        d1            ,d4
  63. CHR2:
  64.     movea.l        CHR_PMADR(a1)        ,a3        * a3..ムーブ判定情報
  65.  
  66.     cmp.w        #0            ,CHR_DIR(a1)
  67.     beq        CHR2_MIGI
  68.         moveq.l        #0            ,d5
  69.         sub.w        MVE_TX(a3)        ,d5
  70.         bra.w        CHRSET_END
  71. CHR2_MIGI:
  72.         move.w        MVE_TX(a3)        ,d5
  73.         moveq.l        #0            ,d1
  74.         move.b        MVE_XD(a3)        ,d1
  75.         add.w        d1            ,d5
  76.  
  77. CHRSET_END:
  78.         move.w        d5            ,d0
  79.         add.w        CHR_VX(a1)        ,d0
  80.         move.w        d4            ,d1
  81.         add.w        CHR_VX(a0)        ,d1
  82.         sub.w        d1            ,d0
  83.     *********************************************************
  84.     *    両者の距離がスクロール範囲以上か?        *
  85.     *********************************************************
  86.     cmpi.w        #256-MAX_SCROLL_POINT*2    ,d0
  87.     bgt.w        SC_OVER
  88.         *************************************************
  89.         *    左補正のチェック            *
  90.         *************************************************
  91.         movea.l        CHR_PMADR(a0)        ,a3    * a3..ムーブ判定情報
  92.         move.w        REP_VRL_SPR_X(a2)    ,d0
  93.         addi.w        #MAX_SCROLL_POINT    ,d0    * d0..左スクロール開始ポイント
  94.         move.w        CHR_VX(a0)        ,d1
  95.         add.w        d4            ,d1    * d1..左判定ポイント
  96.         cmp.w        d0            ,d1
  97.         bge.w        SC_RIGHT
  98.             *****************************************
  99.             *    仮想座標調整            *
  100.             *****************************************
  101.             move.w        d0        ,d2
  102.             sub.w        d1        ,d2    * d2..はみ出した量
  103.                                 * はみ出した量補正
  104.             sub.w        d2        ,REP_VRL_SPR_X(a2)
  105.             bpl.w        @f
  106.                 *********************************
  107.                 *    0以下の領域        *
  108.                 *********************************
  109.                 move.w        #0    ,REP_VRL_SPR_X(a2)
  110.             *****************************************
  111.             *                    *
  112.             *****************************************
  113.             move.w        CHR_VX(a0)    ,d3
  114.             add.w        d4        ,d3
  115.  
  116.             cmpi.w        #0        ,d3
  117.             bge.w        @f
  118.                 move.l        CHR_AMD(a0)        ,d0
  119.                 btst.l        #BIT_AMD_FUNBARI    ,d0
  120.                 bne.w        SCR_OVER
  121.                 tst.w        CHR_TMODE(a0)
  122. *                bne.w        @f
  123.                 bne.w        CAN_CHECK
  124.  
  125.                 moveq.l        #0        ,d3
  126.                 sub.w        d4        ,d3
  127.                 move.w        d3        ,CHR_VX(a0)
  128. *                bra.w        @f
  129.                 bra.w        CAN_CHECK
  130.  
  131. SCR_OVER:
  132.             move.w        CHR_VX(a0)    ,d2
  133.  
  134.             moveq.l        #0        ,d3
  135.             sub.w        d4        ,d3
  136.             move.w        d3        ,CHR_VX(a0)
  137.  
  138.             sub.w        d2        ,d3
  139.             add.w        d3        ,CHR_VX(a1)
  140. *            bra.w        @f
  141.             bra.w        CAN_CHECK
  142.  
  143. SC_RIGHT:    *************************************************
  144.         *    右補正のチェック            *
  145.         *************************************************
  146.         movea.l        CHR_PMADR(a1)        ,a3    * a3..ムーブ判定情報
  147.         move.w        REP_VRL_SPR_X(a2)    ,d0
  148.         addi.w        #256-MAX_SCROLL_POINT    ,d0    * d0..右スクロールポイント
  149.         move.w        CHR_VX(a1)        ,d1
  150.         add.w        d5            ,d1    * d1..右判定ポイント
  151.         cmp.w        d1            ,d0
  152.         bgt.w        @f
  153.             *****************************************
  154.             *    仮想座標調整            *
  155.             *****************************************
  156.             move.w        d1        ,d2
  157.             sub.w        d0        ,d2
  158.             add.w        d2        ,REP_VRL_SPR_X(a2)
  159.             cmpi.w        #256        ,REP_VRL_SPR_X(a2)
  160.             ble.w        @f
  161.                 *********************************
  162.                 *    256以上の領域        *
  163.                 *********************************
  164.                 move.w        #256        ,REP_VRL_SPR_X(a2)
  165.             *****************************************
  166.             *                    *
  167.             *****************************************
  168.             move.w        CHR_VX(a1)    ,d3
  169.             add.w        d5        ,d3
  170.             cmpi.w        #512        ,d3
  171.             blt.w        @f
  172.                 move.l        CHR_AMD(a1)        ,d0
  173.                 btst.l        #BIT_AMD_FUNBARI    ,d0
  174.                 bne.w        SCL_OVER
  175.                 tst.w        CHR_TMODE(a1)
  176. *                bne.w        @f
  177.                 bne.w        CAN_CHECK
  178.  
  179.                 move.w        #512        ,d3
  180.                 sub.w        d5        ,d3
  181.                 move.w        d3        ,CHR_VX(a1)
  182. *                bra.w        @f
  183.                 bra.w        CAN_CHECK
  184.  
  185. SCL_OVER:
  186.                 move.w        CHR_VX(a1)    ,d2
  187.                 add.w        d5        ,d2
  188.  
  189.                 move.w        #512        ,d3
  190.                 sub.w        d5        ,d3
  191.  
  192.                 move.w        d3        ,CHR_VX(a1)
  193.  
  194.                 sub.w        #512        ,d2
  195.                 sub.w        d2        ,CHR_VX(a0)
  196. *                bra.w        @f
  197.                 bra.w        CAN_CHECK
  198.  
  199. SC_OVER:    *************************************************
  200.         *    画面よりも両者の距離が大きいか?    *
  201.         *************************************************
  202.         cmp.w        #256        ,d0
  203.         blt.w        SC_BASE
  204.             *****************************************
  205.             *    画面より大きいため座標補正    *
  206.             *****************************************
  207.             cmp.w        #0        ,CHR_DIR(a0)
  208.             bne.w        SC_OVER1
  209.                 move.w        CHR_VECT_X(a0)    ,d1
  210.                 sub.w        d1        ,CHR_VX(a0)
  211.                 bra.w        SC_OVER2
  212. SC_OVER1:
  213.                 move.w        CHR_VECT_X(a0)    ,d1
  214.                 add.w        d1        ,CHR_VX(a0)
  215. SC_OVER2:
  216.             cmp.w        #0        ,CHR_DIR(a1)
  217.             bne.w        SC_OVER3
  218.                 move.w        CHR_VECT_X(a1)    ,d1
  219.                 sub.w        d1        ,CHR_VX(a1)
  220.                 bra.w        SC_OVER4
  221. SC_OVER3:
  222.                 move.w        CHR_VECT_X(a1)    ,d1
  223.                 add.w        d1        ,CHR_VX(a1)
  224. SC_OVER4:
  225.             move.w        CHR_VX(a0)    ,REP_VRL_SPR_X(a2)
  226.             add.w        d4        ,REP_VRL_SPR_X(a2)
  227.  
  228.             bra.w        CAN_CHECK
  229.  
  230. SC_BASE:
  231.         *************************************************
  232.         *    キャラを画面の中心に設定        *
  233.         *************************************************
  234.         moveq.l        #0        ,d1
  235.  
  236.         move.w        CHR_VX(a0)    ,d3
  237.         add.w        d4        ,d3
  238.  
  239.         cmpi.w        #0        ,d3
  240.         bge.w        SKIP2
  241.             move.l        CHR_AMD(a0)        ,d3
  242.             btst.l        #BIT_AMD_FUNBARI    ,d3
  243.             bne.w        SCR_OVER
  244.             tst.w        CHR_TMODE(a0)
  245.             bne.w        SKIP2
  246.  
  247.             moveq.l        #0        ,d3
  248.             sub.w        d4        ,d3
  249.             move.w        d3        ,CHR_VX(a0)
  250.             moveq.l        #1        ,d1
  251. SKIP2:
  252.         move.w        CHR_VX(a1)    ,d3
  253.         add.w        d5        ,d3
  254.  
  255.         cmpi.w        #512        ,d3
  256.         blt.w        SKIP3
  257.             move.l        CHR_AMD(a1)        ,d3
  258.             btst.l        #BIT_AMD_FUNBARI    ,d3
  259.             bne.w        SCL_OVER
  260.             tst.w        CHR_TMODE(a1)
  261.             bne.w        SKIP3
  262.  
  263.             move.w        #512        ,d3
  264.             sub.w        d5        ,d3
  265.             move.w        d3        ,CHR_VX(a1)
  266.             moveq.l        #1        ,d1
  267. SKIP3:
  268.         lsr.w        #1        ,d0
  269.         add.w        CHR_VX(a0)    ,d0
  270.         add.w        d4        ,d0
  271.  
  272.         subi.w        #128        ,d0
  273.         cmp.w        #0        ,d0
  274.         blt.w        SC_SMALL
  275.         cmp.w        #256        ,d0
  276.         bgt.w        SC_BIG
  277.             *****************************************
  278.             *                    *
  279.             *****************************************
  280.             move.w        d0    ,REP_VRL_SPR_X(a2)
  281.             cmp.w        #1    ,d1
  282.             beq.w        CAN_CHECK
  283.             bra.w        @f
  284. SC_BIG:            *****************************************
  285.             *                    *
  286.             *****************************************
  287.             move.w        #256    ,REP_VRL_SPR_X(a2)
  288.             cmp.w        #1    ,d1
  289.             beq.w        CAN_CHECK
  290.             bra.w        @f
  291. SC_SMALL:        *****************************************
  292.             *                    *
  293.             *****************************************
  294.             move.w        #0    ,REP_VRL_SPR_X(a2)
  295.             cmp.w        #1    ,d1
  296.             beq.w        CAN_CHECK
  297.             bra.w        @f
  298. CAN_CHECK:
  299.     *****************************************
  300.     *    左側の壁の判定            *
  301.     *****************************************
  302.     move.l        CHR_AMD(a0)        ,d0
  303.     btst.l        #BIT_AMD_SIDE_WALL    ,d0
  304.     beq.w        SC_WALL
  305.         *********************************
  306.         *    次のアニメに設定    *
  307.         *********************************
  308.         move.w        #-1        ,CHR_FLG_SET_ANM(a0)
  309.         bra.w        @f
  310. SC_WALL:
  311.     *****************************************
  312.     *    右側の壁の判定            *
  313.     *****************************************
  314.     move.l        CHR_AMD(a1)        ,d0
  315.     btst.l        #BIT_AMD_SIDE_WALL    ,d0
  316.     beq.w        @f
  317.         *********************************
  318.         *    次のアニメに設定    *
  319.         *********************************
  320.         move.w        #-1        ,CHR_FLG_SET_ANM(a1)
  321.         bra.w        @f
  322. @@:
  323.     *********************************************************
  324.     *    終了                        *
  325.     *********************************************************
  326.     move.w        REP_VRL_SPR_X(a2)    ,d1
  327.     move.w        d1            ,REP_GRP_SCR_X0(a2)
  328.     move.w        d1            ,REP_GRP_SCR_X1(a2)
  329.  
  330.     lsr.w        #1            ,d1
  331.     move.w        d1            ,REP_GRP_SCR_X2(a2)
  332.     move.w        d1            ,REP_GRP_SCR_X3(a2)
  333. *    add.w        #64            ,REP_GRP_SCR_X2(a2)
  334. *    add.w        #64            ,REP_GRP_SCR_X3(a2)
  335.  
  336.  
  337.     move.w        CHR_VY(a0)        ,d1
  338.     move.w        CHR_VY(a1)        ,d2
  339.     cmp.w        d1            ,d2
  340.     bge        SKIP6
  341.         move.w        d2            ,d1
  342. SKIP6:
  343.     move.w        #88            ,REP_GRP_SCR_Y0(a2)
  344.     move.w        #88            ,REP_GRP_SCR_Y1(a2)
  345.     move.w        #88            ,REP_VRL_SPR_Y(a2)
  346.     move.w        #88            ,REP_GRP_SCR_Y2(a2)
  347.     move.w        #88            ,REP_GRP_SCR_Y3(a2)
  348.     tst.w        CHR_TMODE(a0)
  349.     bne.w        SKIP7
  350.     tst.w        CHR_TMODE(a1)
  351.     bne.w        SKIP7
  352.  
  353.     cmp.w        #222            ,d1
  354.     bge        SKIP7
  355.         move.w        #222            ,d2
  356.         sub.w        d1            ,d2
  357.         lsr.w        #1            ,d2
  358.         sub.w        d2            ,REP_GRP_SCR_Y0(a2)
  359.         sub.w        d2            ,REP_GRP_SCR_Y1(a2)
  360.         sub.w        d2            ,REP_VRL_SPR_Y(a2)
  361.         lsr.w        #1            ,d2
  362.         sub.w        d2            ,REP_GRP_SCR_Y2(a2)
  363.         sub.w        d2            ,REP_GRP_SCR_Y3(a2)
  364. SKIP7:
  365.     POP        d0-d5/a0-a3
  366.     rts
  367.  
  368.